
                                                            
      DCF77:  Wie man den Status des Empfangsprogramms erfahren kann
      


 Damit andere Programme ermitteln knnen, ob DCF77 die Systemzeit
 erfolgreich eingestellt hat, besitzt das Programm eine Datenstruktur, die
 eine ffentliche SignalSemaphore zur Regelung des Zugriffs enthlt.

 Zum Zugriff auf die Struktur gelten die Regeln fr die Benutzung von
 Public Shared SignalSemaphoren. Es sollte nur lesend zugegriffen werden.

 Die Semaphore ist unter dem Namen "DCF77 State" zu finden.


 struct DCF77StateList
 {
	struct SignalSemaphore sl_Semaphore; // die Semaphore "DCF77 State"
	STRPTR Version; // Zeiger auf die Version von DCF77 (z.B. "1.74")
	BOOL Received;  // FALSE: keine DCF77-Zeit | TRUE: Systemzeit gestellt.

	// Die nachfolgenden Werte existieren erst ab DCF77 Version 2.18:
	LONG ReceiverState; // 0 - kein Signal. 1 - Empfang gestrt.
	                    // 2 - Warte auf Synchronisation. 3 - Empfang luft.
	                    // 4 - Programm inaktiv
	LONG TimeLeft;  // voraussichtl. Dauer [s] bis zum nchsten Stellen
	                // der Zeit
	LONG LastError; // noch nicht implementiert (z.Z. immer Null)
 };


 Als Beispiel zur Benutzung der Struktur finden Sie in diesem Verzeichnis
 die Sourcecodes der Hilfsprogramme WaitForDCF77 und WaitDCF77ifCrash.

 Bei der Weiterentwicklung des Programms ist eine Ergnzung der Struktur
 um weitere Angaben mglich.

 Genaueres ber Semaphoren finden Sie ab Seite 509 in

 	Amiga ROM Kernel Reference Manual: Libraries, Third Edition
 	Addison-Wesley Publishing Company, Inc. 1992
 	ISBN 0-201-56774-1


 Wenn die Versionsnummer von DCF77 abgefragt werden soll, kann das z.B.
 auf folgende Weise geschehen:

	struct DCF77StateList *DCF77PublicState;
	UBYTE	*DCF77SemaphoreName="DCF77 State";
	LONG DCFVersion, DCFRevision, Characters;

	Forbid();
	if(DCF77PublicState=(struct DCF77StateList *) FindSemaphore(DCF77SemaphoreName))
	{
		ObtainSemaphoreShared((struct SignalSemaphore *) DCF77PublicState);

		// Jetzt kann auf die bis Version 2.17 vorhandenen Werte zugegriffen
		// werden...

		Characters=StrToLong(DCF77PublicState->Version,&DCFVersion);
		Characters=StrToLong(DCF77PublicState->Version+Characters+1,&DCFRevision);
		if(DCFVersion>2 || DCFVersion==2 && DCFRevision>=18)
		{
			// ...und jetzt auf die ab Version 2.18 vorhandenen Werte.
		}
		ReleaseSemaphore((struct SignalSemaphore *) DCF77PublicState);
	}
	else
	{
		// DCF77 luft nicht
	}
	Permit();


 Wie Sie sehen, mssen Zugriffe auf eine Semaphore mit Forbid()/Permit()
 abgesichert werden. Um das Systemverhalten nicht zu beeintrchtigen,
 sollten Sie diesen Vorgang mglichst kurz gestalten; am besten kopieren
 Sie bentigte Werte in Hilfsvariablen und werten sie erst nach dem
 Permit() aus.

 Die oben beschriebene Datenstruktur wird sich nicht ndern, sofern
 das nicht im Zusammenhang mit der Weiterentwicklung des Amiga-OS
 unvermeidlich ist.

